ฟังก์ชันสามารถเรียกใช้ได้ในฟิลด์ Variables ของบล็อก หรือโดยตรงในข้อความตอบกลับโดยใช้ #{...}:

#{discord_add_role(message_from, '1465674567090704592')}

ID ของเซิร์ฟเวอร์ Discord, แชนเนล, บทบาท และข้อความเป็นค่าตัวเลขยาว วิธีที่ง่ายที่สุดในการคัดลอกคือเปิด Settings → Advanced → Developer Mode หลังจากนั้น ตัวเลือก Copy ID จะปรากฏในเมนูบริบทของวัตถุใดๆ

การเชื่อมต่อบอทอธิบายไว้ในบทความ How to Create a Chatbot in Discord

จะหา ID ข้อความได้ที่ไหน

ID ของข้อความที่ทริกเกอร์บล็อกจะถูกเก็บไว้ในตัวแปร discord_message_id คุณไม่จำเป็นต้องดึงข้อมูลแยกต่างหาก:

#{discord_delete_message(discord_message_id)}

หากคุณต้องการข้อมูลที่ไม่มีในตัวแปรที่กำหนดไว้ล่วงหน้า webhook แบบเต็มจะพร้อมใช้งานในตัวแปร discord_webhook ตัวแปรนี้จะถูกเติมเมื่อมีการกำหนดค่าใดๆ ให้กับตัวแปร save_webhook:

data = discord_webhook["data"]

msg_id = data["id"]

result = discord_reply_to_message(msg_id, "นี่คือการตอบกลับข้อความ")

ตัวแปรที่สร้างขึ้นโดยอัตโนมัติ

ตัวแปรเหล่านี้จะถูกเติมโดยอัตโนมัติสำหรับแต่ละอีเวนต์และไม่ต้องการการกำหนดค่าเพิ่มเติมใดๆ

ตัวแปร คำอธิบาย ตัวอย่าง
guild_id ID เซิร์ฟเวอร์ 1465674567090704591
discord_event ประเภทอีเวนต์เป็นคำเดียว message
discord_message_id ID ข้อความที่มีคำนำหน้า mid mid1465674569095319625
message_from ID ผู้เขียนอีเวนต์ที่มีคำนำหน้า uid uid413984787162726410
from_username ชื่อผู้ใช้ Discord ของผู้เขียน 00rei
from_name ชื่อที่แสดงของผู้เขียนในแชท Rus
username ชื่อผู้ใช้สำหรับข้อความโดยตรงถึงบอท 00rei
is_bot 1 หากผู้เขียนอีเวนต์เป็นบอทอื่น 0
nickname ชื่อเล่นบนเซิร์ฟเวอร์; ว่างหากไม่ได้ตั้งค่า Moderator
roles รายการ ID บทบาทของผู้เขียน ["1465674567090704592"]
is_admin 1 หากผู้ใช้เป็นผู้ดูแลระบบหรือเจ้าของเซิร์ฟเวอร์ 1
reply_from ID ของผู้เขียนข้อความที่กำลังตอบกลับ uid493121376652230668
reply_from_username ชื่อผู้ใช้ของผู้เขียนที่กำลังตอบกลับ _deikin
reply_from_name ชื่อที่แสดงของผู้เขียนที่กำลังตอบกลับ Rus
reply_to_bot 1 หากการตอบกลับถึงบอท 0
reply_message_id ID ของข้อความที่กำลังตอบกลับ mid1534837349219958804
reply_text ข้อความของข้อความที่กำลังตอบกลับ ใครอยู่เวรวันนี้?

คำนำหน้า uid, cid และ mid เป็นส่วนหนึ่งของค่า ส่งตัวแปรเหล่านี้ไปยังฟังก์ชันตามที่เป็นอยู่ คุณไม่จำเป็นต้องลบคำนำหน้า

from_name เทียบกับ from_username

from_name มีชื่อที่ควรใช้เพื่อเรียกผู้ใช้ในแชท:

  1. ชื่อเล่นบนเซิร์ฟเวอร์ หากตั้งค่าไว้
  2. ชื่อที่แสดงของบัญชี
  3. ชื่อผู้ใช้

นี่คือตัวแปรที่แนะนำให้ใช้ในการทักทาย เนื่องจาก from_username อาจดูเหมือน _deikin หรือ 00rei

ตัวแปร reply_* จะถูกเติมเมื่อข้อความขาเข้าเป็นการตอบกลับข้อความอื่นเท่านั้น สำหรับข้อความปกติ ตัวแปรทั้งหมดจะถูกล้าง

ดังนั้น เงื่อนไขต่อไปนี้สามารถแยกแยะการตอบกลับจากข้อความปกติได้อย่างน่าเชื่อถือ:

#{reply_from != ''}

ตัวแปร nickname, roles และ is_admin อ้างถึงผู้เขียนอีเวนต์ปัจจุบัน

Discord ไม่ได้ให้ข้อมูลนี้สำหรับอีเวนต์รีแอคชัน ดังนั้นการตรวจสอบผู้ดูแลระบบควรดำเนินการในอีเวนต์ข้อความหรือคำสั่งสแลช

ข้อความขาเข้าจะถูกเก็บไว้ในตัวแปรมาตรฐาน question เช่นเดียวกับในแชนเนลอื่นๆ


อีเวนต์

นอกจากข้อความปกติแล้ว อีเวนต์บริการจะถูกส่งไปยังฟันเนลด้วย

ข้อความของพวกเขาจะถูกเก็บไว้ในตัวแปร question ดังนั้นคุณสามารถจัดการได้โดยใช้เงื่อนไขข้อความปกติ

discord_event ข้อความใน question เมื่อเกิดขึ้น
message ข้อความข้อความ สมาชิกส่งข้อความ
message_edit ข้อความที่อัปเดต ข้อความถูกแก้ไข
interaction /warn @user spam ใช้คำสั่งสแลชหรือคลิกปุ่ม
reaction_add new_like ❤️ uid413984787162726410 เพิ่มรีแอคชัน
reaction_remove reaction_remove ❤️ uid413984787162726410 ลบรีแอคชัน
message_delete message_delete mid1465674569095319625 ลบข้อความ
messages_delete_bulk messages_delete_bulk 12 ลบหลายข้อความ
member_join member_join uid413984787162726410 สมาชิกเข้าร่วมเซิร์ฟเวอร์
member_leave member_leave uid413984787162726410 สมาชิกออกจากเซิร์ฟเวอร์
member_update member_update uid413984787162726410 ชื่อเล่นหรือบทบาทของสมาชิกเปลี่ยน
member_ban member_ban uid413984787162726410 สมาชิกถูกแบน
member_unban member_unban uid413984787162726410 สมาชิกถูกยกเลิกการแบน

สำหรับรีแอคชันแบบกำหนดเอง ID อีโมจิแบบกำหนดเองจะถูกใช้แทนอีโมจิ:

new_like beer:1479419477396291696 uid413984787162726410

ดูรายละเอียดในส่วน Reactions

หากบล็อกควรทริกเกอร์เฉพาะข้อความปกติที่ส่งโดยสมาชิก ให้เพิ่มเงื่อนไขต่อไปนี้:

discord_event == 'message'

ซึ่งจะกรองอีเวนต์บริการทั้งหมดในครั้งเดียว

การตรวจสอบเฉพาะข้อความอีเวนต์นั้นไม่น่าเชื่อถือ เนื่องจากสมาชิกสามารถส่งข้อความเช่น member_join ด้วยตนเองได้

สำคัญ: member_update ถูกทริกเกอร์โดยการอัปเดตสมาชิกใดๆ รวมถึงบทบาทที่กำหนดโดยบอทเอง บล็อกที่ตอบสนองต่อ member_update และกำหนดบทบาทสามารถสร้างลูปได้ ดังนั้นเงื่อนไขดังกล่าวควรถูกจำกัดอย่างเหมาะสมเสมอ


ข้อความ

ฟังก์ชัน คำอธิบาย
discord_send_message(channel_id, text) ส่งข้อความไปยังแชนเนลใดๆ
discord_send_dm(user_id, text) ส่งข้อความโดยตรงถึงสมาชิก
discord_reply_to_message(message_id, text) ตอบกลับข้อความ
discord_edit_message(message_id, text) แก้ไขข้อความที่บอทส่ง
discord_delete_message(message_id) ลบข้อความ
discord_bulk_delete_messages(channel_id, message_ids) ลบหลายข้อความในครั้งเดียว
discord_get_message(channel_id, message_id) ดึงข้อมูลข้อความ
discord_pin_message(message_id) ปักหมุดข้อความ
discord_unpin_message(message_id) เลิกปักหมุดข้อความ

ข้อจำกัดของ Discord: ไม่มีข้อจำกัดด้านเวลาสำหรับการแก้ไขหรือลบข้อความของตัวเอง การลบจำนวนมากใช้ได้เฉพาะกับข้อความที่อายุน้อยกว่า 14 วัน และคุณสามารถลบได้ระหว่าง 2 ถึง 100 ข้อความ ในครั้งเดียว


รีแอคชัน

ฟังก์ชัน คำอธิบาย
discord_send_reaction(message_id, reaction) เพิ่มรีแอคชัน
discord_delete_reaction(message_id, reaction, user_id) ลบรีแอคชัน หากละเว้น user_id รีแอคชันของบอทจะถูกลบ

พารามิเตอร์ reaction ยอมรับอีโมจิปกติ เช่น ❤️ หรือ ID ของอีโมจิเซิร์ฟเวอร์แบบกำหนดเอง

จะหา ID รีแอคชันแบบกำหนดเองได้ที่ไหน

เพิ่มรีแอคชันแบบกำหนดเองที่ต้องการลงในข้อความใดๆ ในแชนเนล

การเรียกกลับเช่นนี้จะปรากฏในแชท:

new_like beer:1479419477396291696 uid413984787162726410

ที่นี่:

beer:1479419477396291696

คือ ID รีแอคชัน

คุณสามารถคัดลอกและใช้ในฟังก์ชันรีแอคชัน:

#{discord_send_reaction(discord_message_id, 'beer:1479419477396291696')}

อีโมจิปกติจะปรากฏในการเรียกกลับตามที่เป็น:

new_like ❤️ uid413984787162726410

โดยที่ uid413984787162726410 คือ ID ของสมาชิกที่เพิ่มรีแอคชัน


การกลั่นกรอง

ฟังก์ชัน คำอธิบาย
discord_timeout_member(user_id, seconds) หมดเวลาสมาชิกตามจำนวนวินาทีที่ระบุ สูงสุด 28 วัน
discord_remove_timeout(user_id) ลบการหมดเวลาก่อนกำหนด
discord_kick_member(user_id) เตะสมาชิกออกจากเซิร์ฟเวอร์; พวกเขาสามารถกลับมาได้โดยใช้คำเชิญ
discord_ban_member(user_id, delete_message_seconds) แบนสมาชิก; อาร์กิวเมนต์ที่สองระบุจำนวนวินาทีของประวัติข้อความที่จะลบ สูงสุด 7 วัน
discord_unban_member(user_id) ยกเลิกการแบนสมาชิก

Discord ไม่อนุญาตให้บอทกลั่นกรองสมาชิกที่มีบทบาทสูงกว่าบทบาทของบอท เจ้าของเซิร์ฟเวอร์ก็ไม่สามารถถูกกลั่นกรองได้เช่นกัน


บทบาทและสมาชิก

ฟังก์ชัน คำอธิบาย
discord_add_role(user_id, role_id) กำหนดบทบาท
discord_remove_role(user_id, role_id) ลบบทบาท
discord_get_roles() รับบทบาทของเซิร์ฟเวอร์และ ID ของพวกเขา
discord_get_member(user_id) รับข้อมูลสมาชิก รวมถึงชื่อเล่น บทบาท และวันที่เข้าร่วม
discord_set_nickname(user_id, nickname) เปลี่ยนชื่อเล่นเซิร์ฟเวอร์ของสมาชิก

บทบาทของบอทต้องสูงกว่าบทบาทที่กำลังกำหนด

ไม่สามารถกำหนดบทบาท @everyone และบทบาทที่จัดการโดยการรวมระบบ รวมถึงบทบาทที่เป็นของบอทอื่น


แชนเนลและตั๋ว

ฟังก์ชัน คำอธิบาย
discord_create_channel(name, type, parent_id, permission_overwrites) สร้างแชนเนล
discord_delete_channel(channel_id) ลบแชนเนล
discord_set_channel_permission(channel_id, target_id, allow, deny, type) อนุญาตหรือปฏิเสธสิทธิ์ของแชนเนล
discord_create_invite(channel_id, max_age, max_uses) สร้างลิงก์เชิญ
discord_get_invites() รับลิงก์เชิญของเซิร์ฟเวอร์

สำหรับ discord_create_channel ค่าเริ่มต้นของ type คือ:

ค่า ประเภทแชนเนล
0 แชนเนลข้อความ
2 แชนเนลเสียง
4 หมวดหมู่

คุณสามารถส่ง ID หมวดหมู่ใน parent_id เพื่อสร้างแชนเนลภายในหมวดหมู่นั้น

สำหรับ discord_set_channel_permission อาร์กิวเมนต์สุดท้ายระบุว่าใครได้รับสิทธิ์:

ค่า เป้าหมาย
1 สมาชิก
0 บทบาท

พารามิเตอร์ allow และ deny ยอมรับค่าต่อไปนี้:

ค่า สิทธิ์
1024 ดูแชนเนล
2048 ส่งข้อความ
3072 ดูแชนเนลและส่งข้อความ
65536 อ่านประวัติข้อความ

สำหรับ discord_create_invite อายุการใช้งานของคำเชิญจะระบุเป็นวินาที

ตัวอย่างเช่น:

86400

หมายถึง 24 ชั่วโมง

ค่า max_uses ที่ 0 หมายถึง ไม่จำกัดการใช้งาน


คำสั่งสแลช

ฟังก์ชัน คำอธิบาย
discord_get_commands() รับคำสั่งที่ลงทะเบียนบนเซิร์ฟเวอร์
discord_set_commands(commands) แทนที่ชุดคำสั่งทั้งหมด

discord_set_commands ยอมรับรายการคำสั่ง:

#{discord_set_commands('[
  {
    "name": "rules",
    "description": "แสดงกฎของเซิร์ฟเวอร์"
  },
  {
    "name": "warn",
    "description": "ออกคำเตือน",
    "options": [
      {
        "type": 6,
        "name": "user",
        "description": "ผู้ใช้",
        "required": true
      },
      {
        "type": 3,
        "name": "reason",
        "description": "เหตุผล",
        "required": false
      }
    ]
  }
]')}

ข้อกำหนดของ Discord

  • name ต้องมีเฉพาะอักขระตัวพิมพ์เล็ก ไม่มีช่องว่าง และต้องมีความยาวระหว่าง 1 ถึง 32 อักขระ
  • description เป็นข้อบังคับและต้องมีความยาวระหว่าง 1 ถึง 100 อักขระ
  • ตัวเลือกที่จำเป็นต้องปรากฏก่อนตัวเลือกที่ไม่จำเป็น
  • การส่งรายการว่างจะลบคำสั่งบอททั้งหมดออกจากเซิร์ฟเวอร์

ประเภทตัวเลือก

ประเภท คำอธิบาย
3 สตริง
4 จำนวนเต็ม
5 บูลีน
6 สมาชิก
7 แชนเนล
8 บทบาท

เมื่อเรียกใช้คำสั่ง มันจะถูกส่งไปยังฟันเนลเป็นสตริงเช่น:

/warn @user spam

กล่าวอีกนัยหนึ่ง ชื่อคำสั่งและค่าตัวเลือกจะถูกคั่นด้วยช่องว่าง

คุณสามารถจัดการได้โดยใช้เงื่อนไขข้อความปกติ

ไม่จำเป็นต้องมีฟังก์ชันแยกสำหรับปุ่ม ปุ่มจะถูกกำหนดค่าในบล็อกการตอบกลับปกติ และการคลิกปุ่มจะได้รับในลักษณะเดียวกับคำสั่ง slash: ค่าของปุ่มจะปรากฏในข้อความ


คะแนนและกระดานผู้นำ

การผสานรวม Discord มีระบบชื่นชมในตัว คะแนนจะถูกมอบให้กับผู้เขียนข้อความที่ถูกอ้างถึง

คุณสามารถใช้มันเพื่อสร้างเลเวล อันดับ และกระดานผู้นำ

ฟังก์ชัน คำอธิบาย
discord_add_thanks_score(value) เพิ่มคะแนนให้กับผู้เขียนข้อความที่ถูกอ้างถึง
discord_add_thanks_score_for_answer(value) เพิ่มคะแนนให้กับสมาชิกที่ตอบกลับ
discord_minus_thanks_score(value) ลบคะแนน
discord_get_score(user_id) คืนค่าคะแนนของสมาชิกเป็นตัวเลข หากไม่มีอาร์กิวเมนต์ จะใช้ผู้เขียนเหตุการณ์
discord_get_level(user_id, points_per_level) รับเลเวลของสมาชิก เกณฑ์เริ่มต้น: 100 คะแนนต่อเลเวล
discord_get_user_info(user_id) รับคะแนน ตำแหน่งในกระดานผู้นำ และชื่อเป็นออบเจกต์เดียว
discord_get_top(count, shift, humanize, delimiter) รับกระดานผู้นำ

สำหรับ discord_get_top:

  • count — จำนวนแถวที่จะส่งคืน;
  • shift — จำนวนแถวที่จะข้าม มีประโยชน์สำหรับการแบ่งหน้า;
  • humanize=true — ส่งคืนข้อความที่พร้อมแสดง;
  • delimiter — ตัวคั่นระหว่างชื่อสมาชิกและคะแนน

เมื่อเปรียบเทียบคะแนนในเงื่อนไขของบล็อก ให้ใช้ discord_get_score ฟังก์ชันนี้จะคืนค่าเป็นตัวเลข ดังนั้นการเปรียบเทียบตัวเลขจึงทำงานได้ตามที่คาดหวัง


ตัวอย่าง

ต้อนรับสมาชิกใหม่ผ่านข้อความโดยตรง

เงื่อนไขของบล็อก:

member_join

ในฟิลด์ ตัวแปร:

discord_send_dm(
    message_from,
    'สวัสดี, #{from_name}! ตรวจสอบกฎที่ปักหมุดไว้'
)

ลบข้อความที่มีคำต้องห้ามและพักการใช้งานสมาชิกเป็นเวลา 24 ชั่วโมง

เงื่อนไขของบล็อก: รายการคำต้องห้าม

เงื่อนไขเพิ่มเติม:

is_admin != 1

ฟังก์ชัน:

discord_delete_message(discord_message_id)

discord_timeout_member(message_from, 86400)

กำหนดบทบาทสำหรับการตอบสนองต่อข้อความเฉพาะ

เงื่อนไขของบล็อก:

new_like 🍕

เงื่อนไขเพิ่มเติม:

contains(discord_message_id, '1534927170965602324')

ฟังก์ชัน:

discord_add_role(
    message_from,
    '1465674567090704592'
)

สร้างช่องตั๋วส่วนตัวจากปุ่ม

ticket = discord_create_channel(
    'ticket-' + from_username
)

ticket_channel = get(
    get(ticket, 'data'),
    'id'
)

discord_set_channel_permission(
    ticket_channel,
    guild_id,
    None,
    1024,
    0
)

discord_set_channel_permission(
    ticket_channel,
    message_from,
    3072,
    None,
    1
)

discord_send_message(
    ticket_channel,
    'อธิบายปัญหาของคุณในข้อความเดียว'
)

บรรทัดการอนุญาตแรกจะซ่อนช่องจากทุกคน (guild_id แทนบทบาท @everyone ที่นี่)

บรรทัดที่สองทำให้ช่องพร้อมใช้งานสำหรับสมาชิกที่สร้างตั๋ว


ให้คะแนนสำหรับการขอบคุณและกำหนดบทบาทตามเลเวล

เงื่อนไขของบล็อก:

thanks;thx;thank you

เงื่อนไขเพิ่มเติม:

reply_from != '' and reply_from != message_from and reply_to_bot != 1

ฟังก์ชัน:

discord_add_thanks_score(1)

if (discord_get_level(reply_from) >= 1) {
    discord_add_role(
        reply_from,
        '1465674567090704592'
    )
}

เงื่อนไข:

reply_from != message_from

ป้องกันไม่ให้สมาชิกให้คะแนนตัวเอง

เงื่อนไข:

reply_to_bot != 1

ป้องกันไม่ให้คะแนนถูกมอบให้กับบอท


แสดงคะแนนของคุณด้วยคำสั่ง

เงื่อนไขของบล็อก:

/xp

ในฟิลด์ ตัวแปร:

points = discord_get_score()

lvl = discord_get_level()

ข้อความตอบกลับ:

#{from_name}, คุณมี #{points} XP · เลเวล #{lvl}

แสดงกระดานผู้นำด้วยคำสั่ง

เงื่อนไขของบล็อก:

/top

ข้อความตอบกลับ:

🏆 กระดานผู้นำ XP:

#{discord_get_top(10, 0, true, ' — ')}